﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Onshi.POS.Articulos;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objetos;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class ArticulosBajaHabilitacion : FormularioBase, IArticulosBajaHabilitacion
    {
        #region Constructores

        public ArticulosBajaHabilitacion(Boolean esSeleccion)
        {
            InitializeComponent();
            btnSeleccionar.Visible = esSeleccion;
            presentador = new ArticulosBajaHabilitacionPresentador(this);
        }

        #endregion

        #region Atributos

        private DetalleArticulo detalle;
        private ArticulosBajaHabilitacionPresentador presentador;
        private Articulo articuloSelecionado;

        #endregion

        #region Propiedades

        public List<Articulo> Lista
        {
            set { bsArticulos.DataSource = value; }
        }

        public Articulo ArticuloSeleccionado
        {
            get { return articuloSelecionado; }
        }

        public Int32 IdArticulo
        {
            get { return ((Articulo)bsArticulos.Current).Id; }
        }

        public Int32 IdTipoArticuloFiltro
        {
            get { return (Int32)cboDevolverTiposArticulosFiltro.SelectedValue; }
        }

        public Byte IdRubroArticuloFiltro
        {
            get { return (Byte)ucDevolverRubrosArticulosFiltro.cboRubrosArticulos.SelectedValue; }
        }

        public Int32 IdMarcaFiltro
        {
            get { return (Int32)ucDevolverMarcasFiltro.cboMarcas.SelectedValue; }
        }

        public Int32 IdPromocionFiltro
        {
            get { return 0; }
        }

        public String CodigoFiltro
        {
            get { return txtCodigoFiltro.Text; }
        }

        public String NombreFiltro
        {
            get { return txtNombreFiltro.Text; }
        }

        public DetalleArticulo Detalle
        {
            set { detalle = value; }
        }

        public EnumEstadoCheck EstaEliminadoFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkEstaEliminadoFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneObservacionFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneObservacionFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneImagenFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneImagenFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        #endregion

        #region Metodos

        private void LimpiarCamposFiltro()
        {
            txtCodigoFiltro.Text = String.Empty;
            txtNombreFiltro.Text = String.Empty;
            ucDevolverDescuentosRecargosFiltro.cboDescuentoRecargos.SelectedValue = (Byte)EnumDescuentoRecargo.TODOS;
            ucDevolverMarcasFiltro.cboMarcas.SelectedValue = (Byte)EnumMarca.TODAS;
            ucDevolverRubrosArticulosFiltro.cboRubrosArticulos.SelectedValue = (Byte)EnumRubroArticulo.TODOS;
            ucExistenciaFiltro.Limpiar();
            ucComisionMaximaFiltro.Limpiar();
            chkEstaEliminadoFiltro.CheckState = CheckState.Indeterminate;
            chkTieneObservacionFiltro.CheckState = CheckState.Indeterminate;
            chkTieneImagenFiltro.CheckState = CheckState.Indeterminate;
        }

        #endregion

        #region Eventos

        private void ArticulosBusqueda_Load(Object sender, EventArgs e)
        {
            try
            {
                ucDevolverDescuentosRecargosFiltro.ActualizarListado();
                ucDevolverMarcasFiltro.ActualizarListado();
                ucDevolverRubrosArticulosFiltro.ActualizarListado();
                cboDevolverTiposArticulosFiltro.ActualizarListado();
                presentador.Inicializar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnNuevo_Click(Object sender, EventArgs e)
        {
            try
            {
                var articulosSeleccionTipo = new ArticulosSeleccionTipo();
                articulosSeleccionTipo.MaximizeBox = false;
                articulosSeleccionTipo.MinimizeBox = false;
                if (articulosSeleccionTipo.ShowDialog() == DialogResult.OK)
                {
                    switch (articulosSeleccionTipo.TipoSeleccionado)
                    {
                        case EnumTipoArticulo.UNIDAD:
                            var articulosAltaModificacion = new ArticulosAltaModificacionUnidad();
                            articulosAltaModificacion.MinimizeBox = false;
                            articulosAltaModificacion.MaximizeBox = false;
                            if (articulosAltaModificacion.ShowDialog() == DialogResult.OK)
                            {
                                presentador.Nuevo();
                                ucUltimaActualizacion.Actualizar();
                            }
                            break;
                        case EnumTipoArticulo.GRUPO:
                            break;
                        case EnumTipoArticulo.SERVICIO:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnModificar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsArticulos.Current != null)
                {
                    var articulosAltaModificacion = new ArticulosAltaModificacionUnidad(((Articulo)bsArticulos.Current).Id);
                    articulosAltaModificacion.MinimizeBox = false;
                    articulosAltaModificacion.MaximizeBox = false;
                    if (articulosAltaModificacion.ShowDialog() == DialogResult.OK)
                    {
                        presentador.Modificar();
                        ucUltimaActualizacion.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsArticulos.Current != null)
                {
                    if (MessageBox.Show("¿Esta seguro que desea eliminar el articulo seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        presentador.Eliminar();
                        ucUltimaActualizacion.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnHabilitar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsArticulos.Current != null)
                {
                    if (MessageBox.Show("¿Esta seguro que desea habilitar el articulo seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        presentador.Habilitar();
                        ucUltimaActualizacion.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnLimpiar_Click(Object sender, EventArgs e)
        {
            LimpiarCamposFiltro();
        }

        private void btnVerObservacion_Click(Object sender, EventArgs e)
        {
            if (bsArticulos.Current != null)
            {
                var articulo = ((Articulo)bsArticulos.Current);
                if (articulo.TieneObservacion == true)
                {
                    presentador.VerObservacion();
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.ARTICULO, articulo.Nombre, detalle.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        private void btnVerImagen_Click(Object sender, EventArgs e)
        {
            if (bsArticulos.Current != null)
            {
                var articulo = ((Articulo)bsArticulos.Current);
                if (articulo.TieneImagen == true)
                {
                    var imagenVer = new ImagenVer(EnumTipoEntidad.ARTICULO, articulo.Id);
                    imagenVer.MaximizeBox = false;
                    imagenVer.MinimizeBox = false;
                    imagenVer.ShowDialog();
                }
            }
        }

        private void btnImprimir_Click(Object sender, EventArgs e)
        {

        }

        private void btnSeleccionar_Click(Object sender, EventArgs e)
        {
            if (bsArticulos.Current != null)
            {
                articuloSelecionado = (Articulo)bsArticulos.Current;
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
                MessageBox.Show("No hay ningun articulo seleccionado", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnActualizar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Actualizar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void grdArticulos_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (grdArticulos.Columns[e.ColumnIndex].Name == colObservacion.Name)
            {
                if (((Articulo)bsArticulos.List[e.RowIndex]).TieneObservacion == true)
                    e.Value = Properties.Resources.page_copy;
            }
            if (grdArticulos.Columns[e.ColumnIndex].Name == colImagen.Name)
            {
                if (((Articulo)bsArticulos.List[e.RowIndex]).TieneImagen == true)
                    e.Value = Properties.Resources.picture;
            }
        }

        private void grdArticulos_CellContentClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (grdArticulos.Columns[e.ColumnIndex].Name == colObservacion.Name)
                {
                    var articulo = ((Articulo)bsArticulos.List[e.RowIndex]);
                    presentador.VerObservacion();
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.ARTICULO, articulo.Nombre, detalle.Observacion);
                    observacionVer.ShowDialog();
                }
                if (grdArticulos.Columns[e.ColumnIndex].Name == colImagen.Name)
                {
                    var articulo = ((Articulo)bsArticulos.List[e.RowIndex]);
                    var imagenVer = new ImagenVer(EnumTipoEntidad.ARTICULO, articulo.Id);
                    imagenVer.MinimizeBox = false;
                    imagenVer.MaximizeBox = false;
                    imagenVer.ShowDialog();
                }
            }
        }

        #endregion
    }
}